#ifndef COMPONENTE_H_
#define COMPONENTE_H_

#include <string>
#include <sstream>
#include "Clave.h"
#include "includes.h"
#include <list>

using namespace std;

namespace Toolkit
{

class Componente
{
public:
    Componente(const TipoSerializacion);
    virtual ~Componente();

    virtual void serializar(stringstream&) const = 0;
    virtual void hidratar(stringstream &stream, const Dato &dato) = 0;

    virtual bool operator <(const Clave&) const = 0;
    virtual bool operator ==(const Clave&) const = 0;

    bool operator >(const Clave& clave) const
    {
        if (!(((*this) < clave)  || ((*this) == clave) ))
        {
            return true;
        } else {
            return false;
        }
    }

    virtual char getTipo() const = 0;
    unsigned long int getTamanoSerializacion() const;

    virtual Componente *clonar() const = 0;

    virtual list<Clave*> getClaves(const Clave &clave) const = 0;

protected:
    TipoSerializacion tSerializacion;
};

}

#endif /* COMPONENTE_H_ */
